package pers.cz.business;

import cn.hutool.core.date.DateUtil;
import pers.cz.commons.upload.FileUploadLog;
import pers.cz.exception.ErrorCode;
import pers.cz.excel.PoiUtils;
import pers.cz.exception.GeneralException;
import pers.cz.mapper.AutoPublicTemplateMapper;
import pers.cz.mapper.AutoTestCaseTemplateMapper;
import pers.cz.model.AutoTestCaseTemplate;
import pers.cz.mybatisPlugin.PageRowBounds;
import pers.cz.pub.AbstractBusiness;
import org.springframework.web.multipart.MultipartFile;
import pers.cz.pub.SequenceEnum;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @program: PostGirl-panent
 * @description: TestCaseTemplateBusiness
 * @author: Cheng Zhi
 * @create: 2021-11-09 14:47
 **/
public class TestCaseTemplateBusiness extends AbstractBusiness {

    /**
     * 分页查询所有测试案例模板
     * @param pageStart
     * @param pageLimit
     * @return
     */
    public List<AutoTestCaseTemplate> queryAllTestCaseTemplateByPage(Integer pageStart, Integer pageLimit) {

        PageRowBounds pageRowBounds = new PageRowBounds(pageStart, pageLimit);
        List<AutoTestCaseTemplate> list = this.getMapper(AutoTestCaseTemplateMapper.class).selectAllTestCaseTemplateByPage(pageRowBounds);

        return list;
    }

    /**
     * 根据编号获取公共模板名称
     * @param id
     * @return
     */
    public String queryTemplateNameByid(Integer id) {

        return this.getMapper(AutoPublicTemplateMapper.class).selectByPrimaryKey(id).getTemplateName();
    }
    /**
     * 获取模板总数
     * @return
     */
    public Integer queryCountTemplate() {
        return this.getMapper(AutoTestCaseTemplateMapper.class).selectCountTemplate();
    }

    /**
     * 添加模板
     * @param autoTestCaseTemplate
     * @return
     */
    public Integer addTestCaseTemplate(AutoTestCaseTemplate autoTestCaseTemplate) {

        Long id = this.getcPublicFunc().getSoNbr(SequenceEnum.TESTCASE_TEMPLATE_SEQUENCE);
        autoTestCaseTemplate.setId(Integer.valueOf(id + ""));
        autoTestCaseTemplate.setCreateTime(DateUtil.date());
        return this.getMapper(AutoTestCaseTemplateMapper.class).insertSelective(autoTestCaseTemplate);
    }

    /**
     * 修改模板
     * @param autoTestCaseTemplate
     * @return
     */
    public Integer updateTestCaseTemplate(AutoTestCaseTemplate autoTestCaseTemplate) {

        return this.getMapper(AutoTestCaseTemplateMapper.class).updateByPrimaryKey(autoTestCaseTemplate);
    }

    /**
     * 删除模板
     * @param id
     * @return
     */
    public Integer deleteTestCaseTemplate(Integer id) {

        return this.getMapper(AutoTestCaseTemplateMapper.class).deleteByPrimaryKey(id);
    }

    /**
     * 模糊查询
     * @param testCaseTemplateName
     * @param publicTemplateName
     * @return
     */
    public List<AutoTestCaseTemplate> selectTestCaseTemplateByFuzzy(String testCaseTemplateName, String publicTemplateName) {

        return this.getMapper(AutoTestCaseTemplateMapper.class).selectTestCaseTemplateByFuzzy(testCaseTemplateName, publicTemplateName);
    }

    /**
     * 解析出模板中的参数
     * @param id
     * @return
     */
    public List<String> selectParamsById(Integer id) {

        AutoTestCaseTemplate autoTestCaseTemplate = this.getMapper(AutoTestCaseTemplateMapper.class).selectByPrimaryKey(id);

        String params = autoTestCaseTemplate.getTemplate();

        String[] newTemplate = params.split("\\$");

        List<String> strings = new ArrayList<>();
        if (newTemplate.length > 1) {
            for (int i=1; i<newTemplate.length; i++) {
                int start = newTemplate[i].indexOf("{") + 1;
                int end = newTemplate[i].indexOf("}");
                String substring = newTemplate[i].substring(start, end);
                strings.add(substring);
            }
        }

        return strings;
    }

    /**
     * 文件入库
     * @param file
     * @return 变更数
     */
    public Integer upload(MultipartFile file, Integer userId) throws IOException {

        int count = 0;
        if (file.isEmpty()) {
            return count;
        }
        String fileName = file.getOriginalFilename();
        FileUploadLog.insertFileUploadBusi(fileName, userId, null);
        List<AutoTestCaseTemplate> listTestCases =  PoiUtils.excelToTestCaseTemplate(file, userId);

        try {
            count = this.getMapper().getBean(AutoTestCaseTemplateMapper.class).batchInsert(listTestCases);
        } catch (Exception e) {
            throw new GeneralException(ErrorCode.FILE_UPLOAD_ERROR);
        }

        return count;
    }

}
